#ifndef MYTRACER_H
#define MYTRACER_H

#include <QObject>
#include "qcustomplot.h"

///
/// \brief The MyTracer class:在图表中显示鼠标所在位置的x,y值的追踪显示器
///
class MyTracer : public QObject
{
    Q_OBJECT

public:
    // 追踪器类型枚举
    enum TracerType
    {
        XAxisTracer,//依附在x轴上，显示x值
        YAxisTracer,//依附在y轴上，显示y值
//        MouseTreacer,// 依附在鼠标上，显示所有的数值 (预留)
        DataTracer//在图中显示x,y值
    };

public:
    // 构造函数
    explicit MyTracer(QCustomPlot *_plot, TracerType _type, QObject *parent = Q_NULLPTR);

    // 析构函数
    ~MyTracer();
    // 设置画笔
    void setPen(const QPen &pen);
    // 设置刷子
    void setBrush(const QBrush &brush);
    // 设置文本
    void setText(const QString &text);
    // 设置标签画笔
    void setLabelPen(const QPen &pen);
    // 更新位置
    void updatePosition(double xValue, double yValue);
    // 设置可见性
    void setVisible(bool vis);

    // 设置绑定Graph
    void setGraph(QCPGraph *graph);

    // 共有设置
    void initCommonSettings();

    // X轴设置
    void initXAxisTracer();

    // Y轴设置
    void initYAxisTracer();

    // 数据追踪器设置
    void initDataTracer();
signals:

protected:
    bool m_visible;//是否可见
    TracerType m_type;//类型
    QCustomPlot *m_plot;//图表
    QCPItemTracer *m_tracer;//跟踪的点
    QCPItemText *m_label;//显示的数值
    QCPItemLine *m_arrow;//箭头

    QString m_labelFormat = "x: %1\ny: %2"; // 默认格式
};


///
/// \brief The MyTraceLine class:用于显示鼠标移动过程中的鼠标位置的直线
///
class MyTraceLine : public QObject
{
public:
    // 直线类型枚举
    enum LineType
    {
        VerticalLine,//垂直线
        HorizonLine, //水平线
        Both//同时显示水平和垂直线
    };
    // 构造函数
    explicit MyTraceLine(QCustomPlot *_plot, LineType _type = VerticalLine, QObject *parent = Q_NULLPTR);
    // 析构函数
    ~MyTraceLine();
    // 初始化直线
    void initLine();
    // 更新位置
    void updatePosition(double xValue, double yValue);

    // 设置可见性
    void setVisible(bool vis);

protected:
    bool m_visible;//是否可见
    LineType m_type;//类型

    QCustomPlot *m_plot; //图表
    QCPItemStraightLine *m_lineV;//垂直线
    QCPItemStraightLine *m_lineH;//水平线

};


#endif // MYTRACER_H
